package com.cc.pokergame;

import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.cc.pokergame.model.TableModel;

import java.util.ArrayList;
import java.util.List;

/**
 * 定义适配器类
 * 继承于RecyclerView.Adapter 泛型传入适配器中的内部类
 */
public class GameAdapter extends RecyclerView.Adapter<GameAdapter.MyViewHolder> {

    // 保存外部传来的数据
    private List<TableModel> modelList = new ArrayList<>();

    /**
     * 当 RecyclerView 需要给定类型的 new RecyclerView. ViewHolder 来表示项时调用。
     * 这个新的 ViewHolder 应该使用一个可以表示给定类型的项的新 View 来构造。您可以手动创建新 View，也可以从 XML 布局文件对其进行膨胀。
     * 新的 ViewHolder 将用于显示使用 onBindViewHolder(RecyclerView. ViewHolder, int, List)的适配器项目。由于它将用于显示数据集中的不同项，因此最好缓存对 View 的子视图的引用，以避免不必要的 View. findViewById(int) 调用。
     *
     * @param parent   The ViewGroup into which the new View will be added after it is bound to
     *                 an adapter position.
     * @param viewType The view type of the new View.
     * @return
     */
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        // 创建一个LayoutInflater对象，拿到父类的上下文对象
        LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
        // TableItemBinding tableItemBinding = TableItemBinding.inflate(R.layout.table_item, parent, true);
        // 解析布局文件，从根标签解析
        View tableItem = layoutInflater.inflate(R.layout.table_item, parent, false);
        // 创建MyViewHolder，需要一个ViewItem布局文件
        MyViewHolder viewHolder = new MyViewHolder(tableItem);
        return viewHolder;
    }

    /**
     * 设置新的数据显示到复用的ViewHolder
     *
     * @param holder   The ViewHolder which should be updated to represent the contents of the
     *                 item at the given position in the data set.
     * @param position The position of the item within the adapter's data set.
     */
    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.bindData(modelList.get(position));
    }

    /**
     * 配置RecycleView总共显示多少个数据
     *
     * @return
     */
    @Override
    public int getItemCount() {
        return modelList.size();
    }


    /**
     * 提供给外部设置数据源的方法
     *
     * @param datas
     */
    public void setData(List<TableModel> datas) {
        // 保存数据
        modelList = datas;
        // 刷新页面
        notifyDataSetChanged();
    }

    class MyViewHolder extends RecyclerView.ViewHolder {
        private TextView tvTableName;
        private TextView tvPot;
        private TextView tvLive;
        private TextView tvMoney;
        private TableModel model;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);

            // 获取控件
            tvTableName = itemView.findViewById(R.id.tableName);
            tvPot = itemView.findViewById(R.id.tvPot);
            tvLive = itemView.findViewById(R.id.tvLiveCount);
            tvMoney = itemView.findViewById(R.id.tvMoneyLevel);

            // 监听控件点击事件
            itemView.setOnClickListener(v -> {
                Intent intent = new Intent(v.getContext(), GameActivity.class);
                intent.putExtra("bottomPot", model.getBottomPot());
                // todo 继续完成跳转开始游戏功能
                v.getContext().startActivity(intent);
            });
        }

        // 绑定控件事件
        public void bindData(TableModel model) {
            // 保存每次进来的model值
            this.model = model;
            tvTableName.setText(model.getTableName());
            tvPot.setText(model.getBottomPot() + "");
            tvLive.setText(model.getLiveCount() + "");
            tvMoney.setText(model.getMoneyRangeString());
        }
    }
}
